#include "mylist.h"

template <class Item> // Item可以是单向链表节点或双向链表节点
struct ListIter // 此处这个迭代器特定只为链表服务
{
    Item* ptr; // 保持与容器之间的一个联系

    ListIter(Item* p = 0)
        : ptr(p) { }

    Item& operator*() const { return *ptr; }
    Item* operator->() const { return ptr; }

    // 以下两个operator++遵循标准做法
    ListIter& operator++()
    {
        ptr = ptr->next();
        return *this;
    }
    ListIter operator++(int)
    {
        ListIter tmp = *this;
        ++*this;
        return tmp;
    }

    bool operator==(const ListIter& i) const
    {
        return ptr == i.ptr;
    }
    bool operator!=(const ListIter& i) const
    {
        return ptr != i.ptr;
    }
};